
CREATE TRIGGER TG_Tabla_Update
ON Tabla

FOR UPDATE AS

--SET XACT_ABORT ON
--BEGIN TRANSACTION

-----------------------------------------------
-- Declaracion e Inicializacion de variables --
-----------------------------------------------
DECLARE 
@Col_Modificadas varchar(200) , 
@Valores_Actuales varchar(1000) , 
@Fecha_Movimiento datetime ,
@Cedula as int ,
@Errores as int , 
@Id_Sistema int ,
@Tabla varchar(30) ,
@Tipo_Movimiento char(1)

SET @Fecha_Movimiento = ( SELECT GETDATE() )
SET @Cedula = Inserted.Cedula
SET @Col_Modificadas = ''
SET @Valores_Actuales = ''
SET @Id_Sistema = 2
SET @Tabla = 'Tabla'
SET @Tipo_Movimiento = 'U'


-------------------------------------------------------
-- La tabla DEBE contener valor en la columna [User] --
-------------------------------------------------------
SET @Errores = 0
IF Inserted.Cedula IS NULL
	SET @Errores = -1
IF Inserted.Cedula <= 0
	SET @Errores = -1

IF @Errores = 0
	BEGIN
	---------------------------------------------------------------
	-- Determino si hubo modificacion de valores en las columnas --
	---------------------------------------------------------------
	IF Deleted.Columna_a <> Inserted.Columna_a	-- tipo char o varchar
		BEGIN
		SET @Col_Modificadas = @Col_Modificadas + 'Columna_a,' 
		SET @Valores_Actuales = @Valores_Actuales + ',' + Inserted.Columna_a
		END
	
	IF Deleted.Columna_b <> Inserted.Columna_b	-- tipo int , etc
		BEGIN
		SET @Col_Modificadas = @Col_Modificadas + 'Columna_b,' 
		SET @Valores_Actuales = @Valores_Actuales + CONVERT(VARCHAR(25), Inserted.Columna_b) + ',' 
		END
	
	IF Deleted.Columna_c <> Inserted.Columna_c	-- tipo datetime
		BEGIN
		SET @Col_Modificadas = @Col_Modificadas + 'Columna_c,' 
		SET @Valores_Actuales = @Valores_Actuales + CONVERT(VARCHAR(25), Inserted.Columna_c ,120) + ',' 
		END
	
	-----------------------------------------------------------------------------
	-- Purgo la coma final de las hileras e inserto el registro en la Bitacora --
	-----------------------------------------------------------------------------
	IF LEN( @Col_Modificadas ) > 0
		BEGIN
		SET @Col_Modificadas = LEFT( @Col_Modificadas , LEN( @Col_Modificadas ) - 1 )
		SET @Valores_Actuales = LEFT( @Valores_Actuales , LEN( @Valores_Actuales ) - 1 )
		INSERT PGR02.Seguridad_PGR.dbo.Bitacora 
			VALUES(	@Fecha_Movimiento ,
				@Cedula ,
				@Id_Sistema , 
				@Tabla ,
				@Tipo_Movimiento ,
				@Col_Modificadas ,
				@Valores_Actuales
			      )
		IF @@error = 0
			SET @Errores = -1
		END
	END

IF @Errores = -1
	BEGIN
	RAISERROR( 'Error en Bitacora' , 16 , 1 )
	ROLLBACK TRANSACTION
	END 
